import http from '@/axios/services'

const state = {
  num: 0,
  num2: 0,
  comprehensive: {

  }
}

/**
 * 如果后端返回的数据，不能够直接在View层显示，需要我们自己组装，这个就很有用了。
 * 当然你可以在每个页面的computed进行处理，如果处理过程是一样的，能够重复利用比较好。
 */
const getters = {
  // 接受3个参数
  numGetters (state, getters, rootState) {
    console.log(state)
  }
}

/**
 * 异步请求可以在actions里面写
 * 通过this.$store.dispatch触发actions
 */
const actions = {
  /**
   * 获取综合列表头部配置
   * @param params
   */
  async fetchComprehensiveHeaderConfig ({ state, commit, rootState }, params) {
    const url = '/mob/column/getJuniorColumnList'
    const res = await http.post(url, params)
    const { data } = res
    // 可以直接写commit
    // 局部的
    // commit('updateTest', {num: 1234, num2: 5678});
    // 全局的,必须加上{root: true}
    // commit('updateCount', {num: 110}, {root: true});
    // 模块间的, 模块如果有命名空间，就需求加上{root: true}
    // commit('moduleA/updateTest', {num: 1234}, {root: true})
    return data
  },

  /**
   * 获取综合列表某一项的ID，ID用来查询轮播配置和列表数据
   * @param params
   * @returns {Promise<void>}
   */
  async fetchComprehensiveColumnId (ctx, params) {
    const url = '/mob/column/getJuniorColumnList'
    const res = await http.post(url, params)
    const { data } = res
    return data
  },

  /**
   * 获取轮播图配置
   * @param params
   * @returns {Promise<void>}
   */
  async fetchBannerConfig (ctx, params) {
    const url = '/mob/learn/news/banner'
    const res = await http.post(url, params)
    const { data } = res
    return data
  },

  /**
   * 获取综合列表
   * @param params
   * @returns {Promise<void>}
   */
  async fetchComprehensive (ctx, params) {
    const url = '/mob/learn/news/pager'
    const res = await http.post(url, params)
    const { data } = res
    return data
  }
}

/**
 * vuex官方推荐，修改state里面的数据，要通过mutation来修改
 * this.$store.commit() 修改mutation
 * 同步处理在mutations里面写
 */
const mutations = {
  updateTest (state, { num, num2 }) {
    state.num = num
    state.num2 = num2
  },
  updateTest2 (state, { num, num2 }) {

  }
}

export default {
  // 默认情况下，模块下的actions/mutations会集成到全局的actions/mutations下，方法名不能重复
  // 如果加上namespaced: true, 每个模块下可以写相同的actions/mutations的方法名了
  namespaced: true,
  state,
  getters,
  actions,
  mutations
}
